// 2014-03-10 Tyrghen
//---------------------------------------------
// Usage:
//  ["STR_TASK_DESTROY_TITLE", "created", "STR_TASK_DESTROY_DESC","marker_task_destroy","jip_var_destroyed"] call edt_fnc_taskSilent;
//  ["STR_TASK_DESTROY_TITLE", "succeeded"] call edt_fnc_taskSilent;
//  Syntax using a target group or side - Syntaxe utilisant un group cible ou un camp
//  ["STR_TASK_DESTROY_TITLE", "created", grpPlayer, "STR_TASK_DESTROY_DESC","marker_task_destroy","jip_var_destroyed"] call edt_fnc_task;
//  ["STR_TASK_DESTROY_TITLE", "created", west, "STR_TASK_DESTROY_DESC","marker_task_destroy","jip_var_destroyed"] call edt_fnc_task;
//---------------------------------------------
// Purpose:
// Creates a task in the task list you see when opening the map. This function does NOT show a task hint when changing the status (or creating the task)
// You can use the alternate syntax to add the task to only one group or side. In such a case, add the group/side object right after the status.
// If you want to designate the group or side by it's name, you will need to give all optional parameters!!!
// 
// Parameters:
// - Task Title: Can be text or a magic string (starting with STR_). It HAS to be unique
// - Task Status: has to be one of the valid Status for a task: created, failed, canceled, succeeded, assigned
// Optional Parameters:
// - (Alternate Syntax) Group or Side: The group/side for which this task will be visible. Only players of that group/side will see the task.
// - Task Description: The text which is shown inside the Task List when you click on the Task. (Can be a magic string as well)
// - Task Marker: The name of the marker used to create a task marker. The marker can have a Text which will be used as a Tooltip. The text can be a magic string.
// - Success Var: The name of a JIP synchronised variable (those you can read/set with EDT_fnc_getVar and EDT_fnc_setVar) indicating the success of the task
// - Failed Var: The name of a JIP synchronised variable (those you can read/set with EDT_fnc_getVar and EDT_fnc_setVar) indicating the failure of the task
//
// Returns:
// True
//---------------------------------------------
// Objectif:
// Crée une tâche dans la liste des tâches visibles quand on ouvre la carte. Cette fonction n'affiche PAS de notification lors des changements de statut.
// Vous pouvez utiliser la syntaxe alternative pour ajouter une tâche à un groupe seulement ou un camp. Dans ce cas, ajoutez le groupe directement après le statut.
//
// Paramètres:
// - Titre de la tâche: Peut être du texte ou un chaîne magique (commençant par STR_). DOIT être unique.
// - Statut de la tâche: doit être un statut valide pour une tâche: created, failed, canceled, succeeded, assigned
// Paramètres Optionnels:
// - (Syntaxe alternative) Groupe ou Camp: Le groupe/camp pour lequel la tâche sera visible. Seuls les joueurs de ce groupe/camp verront la tâche.
// - Description de la tâche: Le texte qui apparaît dans la liste lorsqu'on sélectionne une tâche. (Peut aussi être une chaîne magique)
// - Marqueur de tâche: Le nom du marqueur sur carte qui indique l'endroit où se trouve la tâche. Le texte du marqueur sera utilisé comme "conseil" lorsqu'on survole le marqueur.
// - Variable de succès: Le nom de la variable synchronisée en JIP (celles que vous pouvez lire ou écrire avec EDT_fnc_getVar et EDT_fnc_setVar) qui indique que la tâche est acoomplie.
// - Variable d'échec: Le nom de la variable synchronisée en JIP (celles que vous pouvez lire ou écrire avec EDT_fnc_getVar et EDT_fnc_setVar) qui indique que la tâche est échouée.
//
// Renvoie:
// True
//---------------------------------------------

//#define __FORCE_TRACE__
//#define __FORCE_DEBUG__
//#define __FORCE_INFO__
#define THIS_FILE "editor\fn_taskSilent.sqf"
#include <tmf_constants.h>
#include <tmf_macros.h>

if (!isServer) exitWith {TRACE("Not Server")};

TRACE_1("Start",_this);
TMFPROFILERSTART;

private ["_taskDetails","_taskTitle","_taskDesc","_taskWP","_taskStatus","_taskSuccessVar","_taskFailedVar","_taskFailedInvertVar","_params","_idx","_taskGroup"];
DEFAULT_PARAM(_taskTitle,0,"");
DEFAULT_PARAM(_taskStatus,1,"Created");
DEFAULT_PARAM(_taskDesc,2,"");
_idx = 2;
_taskGroup = "";
if (IS_GROUP(_taskDesc) || {IS_SIDE(_taskDesc)} || {count _this >= 8}) then {
	if (IS_STRING(_taskDesc)) then {
		_taskGroup = _taskDesc;	
	} else {
		_taskGroup = str(_taskDesc);	
	};
	TRACE_1("Task Group",_taskGroup);
	INC(_idx);
	DEFAULT_PARAM(_taskDesc,_idx,"");
};
INC(_idx);
DEFAULT_PARAM(_taskWP,_idx,"");
INC(_idx);
DEFAULT_PARAM(_taskSuccessVar,_idx,"");
INC(_idx);
DEFAULT_PARAM(_taskFailedVar,_idx,"");
INC(_idx);
DEFAULT_PARAM(_taskFailedInvertVar,_idx,"");

_taskDetails = [];
SETVAL(_taskDetails, 0,_taskTitle);
SETVAL(_taskDetails, 1,_taskTitle);
SETVAL(_taskDetails, 2,_taskDesc);
SETVAL(_taskDetails, 3,if (_taskWP != "") then { MarkerText _taskWP} else {""});
SETVAL(_taskDetails, 4,if (_taskWP != "") then { MarkerPos _taskWP} else {ARR_3(0,0,0)});
SETVAL(_taskDetails, 5,_taskStatus);
SETVAL(_taskDetails, 6,_taskSuccessVar);
SETVAL(_taskDetails, 7,_taskFailedVar);
SETVAL(_taskDetails, 8,_taskFailedInvertVar);
SETVAL(_taskDetails, 9,_taskGroup);

_params = [];
SETVAL(_params, 0,_taskDetails);
SETVAL(_params, 1,TMF_SERVER_INSTANCE_ID);
SETVAL(_params, 2,true);

if (!(isNil QGVAR(INITIALIZED)) && {GVAR(INITIALIZED)} && {time > 6}) then {
	DEBUG_1("Direct task init",_params);
	[QGVAR(all_task),_params,THIS_FILE] call FFUNC(callEvent);
} else {
	_params spawn {
		waituntil {(!(isNil QGVAR(INITIALIZED)) && {GVAR(INITIALIZED)} && {time > 6})};
		DEBUG_1("Delayed task init",_this);
		sleep 0.5;
		[QGVAR(all_task),_this,THIS_FILE] call FFUNC(callEvent);
	};
};

TRACE("End");
TMFPROFILERSTOP;
true;